home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1996 June / EnigmA AMIGA RUN 08 (1996)(G.R. Edizioni)(IT)[!][issue 1996-06][EARSAN CD VII].iso / earcd / gcc / ixemlsrc.lha / ixemul / utils / functions.c < prev    next >
C/C++ Source or Header  |  1996-03-26  |  8KB  |  332 lines

  1. /*
  2.     Ixprefs v.2.2--ixemul.library configuration program
  3.     Copyright © 1995 Kriton Kyrimis
  4.  
  5.     This program is free software; you can redistribute it and/or modify
  6.     it under the terms of the GNU General Public License as published by
  7.     the Free Software Foundation; either version 2 of the License, or
  8.     (at your option) any later version.
  9.  
  10.     This program is distributed in the hope that it will be useful,
  11.     but WITHOUT ANY WARRANTY; without even the implied warranty of
  12.     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  13.     GNU General Public License for more details.
  14.  
  15.     You should have received a copy of the GNU General Public License
  16.     along with this program; if not, write to the Free Software
  17.     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  18. */
  19. #include <stdio.h>
  20. #include <string.h>
  21. #include <exec/types.h>
  22. #include <intuition/intuition.h>
  23. #include <proto/dos.h>
  24. #include <proto/intuition.h>
  25. #include "ixprefs.h"
  26. #include "ixemul.h"
  27. #include "version.h"
  28.  
  29. #define IXPREFS_VERSION "2.2"
  30.  
  31. #define RUNNING 1
  32. #define NOT_RUNNING 0
  33.  
  34. #define CONFIGFILE "ENVARC:" IX_ENV_SETTINGS
  35. #define ENVFILE "ENV:" IX_ENV_SETTINGS
  36.  
  37. /* These strings are long enough to have a high probability of being typed
  38.    incorrectly, especially as they are used more than once. Using these
  39.    definitions, we can detect typing errors at compile time */
  40. #define IX_NO_INSERT_DISK_REQUESTER "ix_no_insert_disk_requester"
  41. #define IX_UNIX_PATTERN_MATCHING_CASE_SENSITIVE "ix_unix_pattern_matching_case_sensitive"
  42. #define IX_WATCH_STACK "ix_watch_stack"
  43. #define IX_TRANSLATE_SLASH "ix_translate_slash"
  44. #define IX_MEMBUF_LIMIT "ix_membuf_limit"
  45. #define IX_RED_ZONE_SIZE "ix_red_zone_size"
  46. #define IX_FS_BUF_FACTOR "ix_fs_buf_factor"
  47. #define IX_ALLOW_AMIGA_WILDCARD "ix_allow_amiga_wildcard"
  48.  
  49. extern void showrequester(struct Window*, char *, char *);
  50.  
  51. extern struct ixemul_base *ixemulbase;
  52. extern int translateslash, membuf, watcher, redzone, blocks, cases, suppress,
  53.        amigawildcard, noflush, ignoreenv, networking, enforcerhit;
  54.  
  55. struct ix_settings settings;
  56.  
  57. extern void displayprefs(void);
  58.  
  59. void
  60. use(void)
  61. {
  62.   FILE *f;
  63.   unsigned long new_flags;
  64.  
  65.   new_flags =
  66.     (translateslash ? ix_translate_slash : 0)
  67.   | (watcher ? ix_watch_stack : 0)
  68.   | (cases ? ix_unix_pattern_matching_case_sensitive : 0)
  69.   | (suppress ? ix_no_insert_disk_requester : 0)
  70.   | (amigawildcard ? ix_allow_amiga_wildcard : 0)
  71.   | (noflush ? ix_do_not_flush_library : 0)
  72.   | (ignoreenv ? ix_ignore_global_env : 0)
  73.   | (enforcerhit ? ix_create_enforcer_hit : 0);
  74.   settings.version = IX_VERSION;
  75.   settings.revision = IX_REVISION;
  76.   settings.flags = new_flags;
  77.   settings.membuf_limit = membuf;
  78.   settings.red_zone_size = redzone;
  79.   settings.fs_buf_factor = blocks;
  80.   settings.network_type = networking;
  81.   ix_set_settings(&settings);
  82.   f = fopen(ENVFILE, "w");
  83.   if (f) {
  84.     fwrite(&settings, sizeof(settings), 1, f);
  85.     fclose(f);
  86.   } else {
  87.     showrequester(ixprefsWnd, "Can't open " ENVFILE, "OK");
  88.   }
  89. }
  90.  
  91. void
  92. save(void)
  93. {
  94.   FILE *f;
  95.  
  96.   use();
  97.   f = fopen(CONFIGFILE, "w");
  98.   if (f) {
  99.     fwrite(&settings, sizeof(settings), 1, f);
  100.     fclose(f);
  101.   }else{
  102.     showrequester(ixprefsWnd, "Can't open " CONFIGFILE, "OK");
  103.   }
  104. }
  105.  
  106. int
  107. selected(int which)
  108. {
  109.   if (ixprefsGadgets[which]->Flags & GFLG_SELECTED) {
  110.     return 1;
  111.   }else{
  112.     return 0;
  113.   }
  114. }
  115.  
  116. int savegadClicked( void )
  117. {
  118.   /* routine when gadget "Save" is clicked. */
  119.   save();
  120.   return NOT_RUNNING;
  121. }
  122.  
  123. int usegadClicked( void )
  124. {
  125.   /* routine when gadget "Use" is clicked. */
  126.   use();
  127.   return NOT_RUNNING;
  128. }
  129.  
  130. int cancelgadClicked( void )
  131. {
  132.   /* routine when gadget "Cancel" is clicked. */
  133.   return NOT_RUNNING;
  134. }
  135.  
  136. int translateslashClicked( void )
  137. {
  138.   /* routine when gadget "translate /" is clicked. */
  139.   translateslash = selected(GDX_translateslash);
  140.   return RUNNING;
  141. }
  142.  
  143. int membufClicked( void )
  144. {
  145.   /* routine when gadget "membuf size" is clicked. */
  146.   membuf = GetNumber(ixprefsGadgets[GDX_membuf]);
  147.   return RUNNING;
  148. }
  149.  
  150. int redzoneClicked( void )
  151. {
  152.   /* routine when gadget "red zone size" is clicked. */
  153.   redzone = GetNumber(ixprefsGadgets[GDX_redzone]);
  154.   return RUNNING;
  155. }
  156.  
  157. int watcherClicked( void )
  158. {
  159.   /* routine when gadget "enable stack watcher" is clicked. */
  160.   watcher = selected(GDX_watcher);
  161.   return RUNNING;
  162. }
  163.  
  164. int blocksClicked( void )
  165. {
  166.   /* routine when gadget "physical blocks to build one logical block (for stdio)" is clicked. */
  167.   blocks = GetNumber(ixprefsGadgets[GDX_blocks]);
  168.   return RUNNING;
  169. }
  170.  
  171. int caseClicked( void )
  172. {
  173.   /* routine when gadget "case sensitive)" is clicked. */
  174.   cases = selected(GDX_case);
  175.   return RUNNING;
  176. }
  177.  
  178. int suppressClicked( void )
  179. {
  180.   /* routine when gadget "suppress the \"Insert volume in drive\" requester" is clicked. */
  181.   suppress = selected(GDX_suppress);
  182.   return RUNNING;
  183. }
  184.  
  185. int networkingClicked( void )
  186. {
  187.   /* routine when cycle gadget "Networking support" is clicked. */
  188.   networking = ixprefsMsg.Code;
  189.   return RUNNING;
  190. }
  191.  
  192. int amigawildcardClicked( void )
  193. {
  194.   /* routine when gadget "allow Amiga wildcards" is clicked. */
  195.   amigawildcard = selected(GDX_amigawildcard);
  196.   return RUNNING;
  197. }
  198.  
  199. int noflushClicked( void )
  200. {
  201.   /* routine when gadget "do not flush library" is clicked. */
  202.   noflush = selected(GDX_noflush);
  203.   return RUNNING;
  204. }
  205.  
  206. int ignoreenvClicked( void )
  207. {
  208.   /* routine when gadget "ignore global environment (ENV:)" is clicked. */
  209.   ignoreenv = selected(GDX_ignoreenv);
  210.   return RUNNING;
  211. }
  212.  
  213. int enforcerhitClicked( void )
  214. {
  215.   /* routine when gadget "Create Enforcerhit on trap" is clicked. */
  216.   enforcerhit = selected(GDX_enforcerhit);
  217.   return RUNNING;
  218. }
  219.  
  220. int ixprefssave( void )
  221. {
  222.   /* routine when (sub)item "Save" is selected. */
  223.   save();
  224.   return NOT_RUNNING;
  225. }
  226.  
  227. int ixprefsuse( void )
  228. {
  229.   /* routine when (sub)item "Use" is selected. */
  230.   use();
  231.   return NOT_RUNNING;
  232. }
  233.  
  234. int ixprefsabout( void )
  235. {
  236.   /* routine when (sub)item "About" is selected. */
  237.   showrequester(ixprefsWnd,
  238.     "Ixprefs v." IXPREFS_VERSION "--ixemul.library configuration program\n"
  239.     "Copyright \251 1995 Kriton Kyrimis\n\n"
  240.     "This program is free software; you can redistribute it\n"
  241.     "and/or modify it under the terms of the GNU General\n"
  242.     "Public License as published by the Free Software Foundation;\n"
  243.     "either version 2 of the License, or (at your option)\n"
  244.     "any later version.\n\n"
  245.     "GUI designed using GadToolsBox 2.0c by Jan van den Baard",
  246.     "OK");
  247.   return RUNNING;
  248. }
  249.  
  250. int ixprefsquit( void )
  251. {
  252.   /* routine when (sub)item "Quit" is selected. */
  253.   return NOT_RUNNING;
  254. }
  255.  
  256. void read_from_settings(struct ix_settings *settings)
  257. {
  258.   translateslash = (settings->flags & ix_translate_slash) != 0;
  259.   watcher = (settings->flags & ix_watch_stack) != 0;
  260.   cases = (settings->flags & ix_unix_pattern_matching_case_sensitive) != 0;
  261.   suppress = (settings->flags & ix_no_insert_disk_requester) != 0;
  262.   amigawildcard = (settings->flags & ix_allow_amiga_wildcard) != 0;
  263.   noflush = (settings->flags & ix_do_not_flush_library) != 0;
  264.   ignoreenv = (settings->flags & ix_ignore_global_env) != 0;
  265.   enforcerhit = (settings->flags & ix_create_enforcer_hit) != 0;
  266.   membuf = settings->membuf_limit;
  267.   redzone = settings->red_zone_size;
  268.   blocks = settings->fs_buf_factor;
  269.   networking = settings->network_type;
  270. }
  271.  
  272. void defaults(void)
  273. {
  274.   read_from_settings(ix_get_default_settings());
  275. }
  276.  
  277. int ixprefsreset(void)
  278. {
  279.   /* routine when (sub)item "Reset to defaults" is selected. */
  280.  
  281.   defaults();
  282.   displayprefs();
  283.   return RUNNING;
  284. }
  285.  
  286. int
  287. last_saved(void)
  288. {
  289.   FILE *f;
  290.   int status;
  291.  
  292.   f = fopen(CONFIGFILE, "r");
  293.   if (f) {
  294.     fread(&settings, sizeof(settings), 1, f);
  295.     fclose(f);
  296.     read_from_settings(&settings);
  297.     status = 0;
  298.   }else{
  299.     showrequester(ixprefsWnd, "Can't open " CONFIGFILE, "OK");
  300.     status = 1;
  301.   }
  302.   return status;
  303. }
  304.  
  305. int ixprefslast( void )
  306. {
  307.   /* routine when (sub)item "Last Saved" is selected. */
  308.   if (last_saved() == 0) {
  309.     displayprefs();
  310.   }
  311.   return RUNNING;
  312. }
  313.  
  314. int ixprefsrestore( void )
  315. {
  316.   struct ix_settings *settings;
  317.  
  318.   /* routine when (sub)item "Restore" is selected. */
  319.   settings = ix_get_settings();
  320.   read_from_settings(settings);
  321.  
  322.   displayprefs();
  323.  
  324.   return RUNNING;
  325. }
  326.  
  327. int ixprefsCloseWindow( void )
  328. {
  329.   /* routine for "IDCMP_CLOSEWINDOW". */
  330.   return NOT_RUNNING;
  331. }
  332.